import request from "@/utils/request";

const BASE_URL = "/api/v1/person";

// 类型定义
interface FormData {
  personId?: string;
}

interface Item {
  id: string;
  firstName: string;
  lastName: string;
  photoUrl: string;
  gender: number;
  alive: number;
  genation: string | null;
  occupation: string | null;
  birthPlace: string | null;
  address: string | null;
  longitude: number | null;
  latitude: number | null;
  birthDate: string | null;
  deathDate: string | null;
  biography: string | null;
  nickname: string | null;
  parentId: string | null;
  parentName: string | null;
  spouseName: string | null;
  createTime: string;
  updateTime: string;
  isDeleted: number;
  familyId: string;
  children: Item[];
  spouseList: Item[];
  level: number;
  remark: string | null;
  motherId: string | null;
  motherName: string | null;
}

interface Info {
  id: string | null;
  firstName: string | null;
  lastName: string | null;
  photoUrl: string | null;
  gender: number;
  alive: number;
  genation: string | null;
  occupation: string | null;
  birthPlace: string | null;
  address: string | null;
  longitude: string | null;
  latitude: string | null;
  birthDate: string | null;
  deathDate: string | null;
  biography: string | null;
  nickname: string | null;
  parentId: string | null;
  familyId: string | null;
  flag: number;
  motherId: string | null;
  type: string | null;
  personId: string | null;
}

interface FormPage {
  familyName: string | null;
  familyId: number | null;
  pageNum: number;
  pageSize: number;
}

interface PageList {
  id: string;
  firstName: string;
  lastName: string;
  photoUrl: string;
  gender: number;
  alive: number;
  genation: string; // 推测可能是generation的拼写错误
  occupation: string;
  birthPlace: string;
  address: string;
  longitude: string;
  latitude: string;
  birthDate: string; // 建议使用Date类型，但保留原始字符串格式
  deathDate: string; // 建议使用Date类型，但保留原始字符串格式
  biography: string;
  nickname: string;
  parentId: string;
  parentName: string;
  spouseName: string;
  createTime: string; // 建议使用Date类型，但保留原始字符串格式
  updateTime: string; // 建议使用Date类型，但保留原始字符串格式
  isDeleted: number;
  familyId: string;
  spouseList: Item[];
  level: number;
  remark: string;
  motherId: string;
  motherName: string;
}

export interface PageResponse {
  list: PageList[];
  total: number;
}

const PersonAPI = {
  /**
   * 获取家族树列表
   * @param {FormData} queryParams 包含personId的查询参数
   * @returns {Promise<Item[]>} 家族树数据
   */
  getTree(queryParams: FormData): Promise<Item[]> {
    return request({
      url: `${BASE_URL}/app/getTreeData`,
      method: "GET",
      data: { personId: queryParams.personId },
    });
  },
  /**
   * 获取九族图列表
   * @param {FormData} queryParams 包含personId的查询参数
   * @returns {Promise<Item[]>} 家族树数据
   */
  getTreeDataForFour(queryParams: FormData): Promise<Item[]> {
    return request({
      url: `${BASE_URL}/getTreeDataForFour`,
      method: "GET",
      data: { personId: queryParams.personId },
    });
  },
  /**
   * 获取十八代列表
   * @param {FormData} queryParams 包含personId的查询参数
   * @returns {Promise<Item[]>} 家族树数据
   */
  getTreeDataForNine(queryParams: FormData): Promise<Item[]> {
    return request({
      url: `${BASE_URL}/getTreeDataForNine`,
      method: "GET",
      data: { personId: queryParams.personId },
    });
  },

  /**
   * 获取家族成员表单数据
   * @param {FormData} queryParams 包含personId的查询参数
   * @returns {Promise<Info>} 家族表单数据
   */
  getFormData(queryParams: FormData): Promise<Info> {
    return request({
      url: `${BASE_URL}/${queryParams.personId}/form`,
      method: "GET",
    });
  },

  /**
   * 获取家族成员数据
   * @param {FormPage} queryParams 包含分页和筛选条件的查询参数
   * @returns {Promise<PageResponse>} 家族成员分页数据
   */
  getPage(queryParams: FormPage): Promise<PageResponse> {
    console.log(queryParams);
    return request({
      url: `${BASE_URL}/page`,
      method: "GET",
      data: queryParams,
    });
  },

  /**
   * 获取家族成员数据
   * @param {FormPage} queryParams 包含分页和筛选条件的查询参数
   * @returns {Promise<PageResponse>} 家族成员分页数据
   */
  update(queryParams: Info) {
    return request({
      url: `${BASE_URL}/${queryParams.id}`,
      method: "PUT",
      data: queryParams,
    });
  },
  /**
   * 获取关联人员列表
   */
  getAssoc(queryParams) {
    console.log(queryParams + "我是参数");
    return request({
      url: `${BASE_URL}/page`,
      method: "GET",
      data: queryParams,
    });
  },
  /**
   * 添加子辈成员
   * @param {Object} data 子辈数据
   * @returns {Promise} 请求结果
   */
  addChild(queryParams: object) {
    return request({
      url: `${BASE_URL}/saveByType`,
      method: "POST",
      data: queryParams,
    });
  },
  /**
   * 获取对应人员的信息
   */
  getPersonInfo(queryParams: any) {
    console.log(queryParams);
    return request({
      url: `${BASE_URL}/${queryParams.id}/form`,
      method: "GET",
    });
  },
  /**
   * 添加家族
   * @param {Object} data 家族表单数据
   * @returns {Promise} 请求结果
   */
  create(queryParams: any) {
    return request({
      url: `${BASE_URL}`,
      method: "POST",
      data: queryParams,
    });
  },
  /**
   * 删除家族成员
   * @param {string} personId 包含personId的参数
   * @returns {Promise} 请求结果
   *
   */
  deletePerson(personId: string) {
    return request({
      url: `${BASE_URL}/${personId}`,
      method: "DELETE",
    });
  },
};

export default PersonAPI;
